#include "main.h"


// 鍒濆鍖栭槦鍒椼€傚垵濮嬪寲鎴愬姛杩斿洖0锛涘垵濮嬪寲澶辫触杩斿洖1銆?int init_queue(Queue ** q) {
    *q=(Queue *)malloc(sizeof(Queue));
    Queue *sq=*q;
    sq->size=0;
    return 1;
}

// 鍦ㄩ槦鍒梣鐨勫熬宸翠笂澧炲姞涓€涓厓绱狅紝鍏跺€间负value銆傚鍔犳垚鍔燂紝杩斿洖0锛涘鍔犲け璐ワ紝杩斿洖1
int enqueue (Queue * q, int value){
if (q->size==QUEUE_MAX_SIZE){
        printf("闃熸弧!鏃犳硶娣诲姞\n");//闃熺┖锛屾姤閿欙紒
        return 0;
    }else{
        q->elements[q->size]=value; //婊¤冻锛屾坊鍔犲厓绱狅紝瀛樺€?-->size++
        q->size++;
        return 1;
    }
}

// 浠庨槦鍒梣涓婃憳鍙栵紙鍘绘帀锛変竴涓厓绱狅紝灏嗗叾鍊兼斁鍏alue涓€傛憳鍙栨垚鍔燂紝杩斿洖0锛涙憳鍙栧け璐ワ紝杩斿洖1銆?int dequeue(Queue * q, int *value){
    if (q->size==0){
        printf("闃熺┖!!\n"); //闃熺┖锛屾姤閿欙紒
        return 1;
    }else{
        *value=q->elements[100-q->size];//婊¤冻锛屽垯鎽樺彇鍏冪礌锛屽瓨鍊?        q->size--;//鍘婚櫎鍚庯紝size--
        return 0;
    }
}

// 鑾峰彇闃熷垪q鐨勭涓€涓厓绱狅紝浣嗘槸骞朵笉鍘绘帀璇ュ厓绱狅紝骞跺皢璇ュ€兼斁鍏alue涓€傝幏鍙栨垚鍔熻繑鍥?锛涜幏鍙栧け璐ワ紝杩斿洖1銆?int first(Queue * q, int * value){
    if (q->size == 0){ //鐩稿綋浜巕->front != q->rear
        return 1;}
    else{
        *value = q->elements[0];//q-front
        return 0;}
}

// 鍒ゆ柇闃熷垪q鏄惁涓虹┖銆備负绌猴紝杩斿洖0锛涗笉涓虹┖锛岃繑鍥?銆?int isEmpty(Queue * q){
    if(q->size == 0) {
        return 0;    //闃熺┖鏉′欢
    }else{
       return 1;
    }
}
// 杩斿洖闃熷垪q涓殑鍏冪礌涓暟銆?int size(Queue * q){
    if (q->size==0){
        printf("杩欐槸绌虹殑闃熷垪锛?);
        return 0;
    } else
    {
        return q->size;
    }
}

void main() {
    Queue * q;
    int value;

    init_queue(&q);

    for(int i=1; i<=QUEUE_MAX_SIZE; i++) {
        enqueue(q, i);
    }

    printf("闃熷垪涓簲褰撴湁 %d 涓厓绱狅紱瀹為檯涓婃湁 %d 涓厓绱犮€俓n", QUEUE_MAX_SIZE, size(q));

    int res = enqueue(q, 101);
    printf("鍦ㄥ凡缁忔坊鍔犱簡100涓厓绱犱互鍚庯紝鍐嶆娣诲姞涓€涓厓绱狅紝杩斿洖鍊煎簲璇ユ槸1锛岃〃绀烘柊澧炲厓绱犲け璐ャ€傚疄闄呭€间负:%d\n", res);

    first(q, &value);
    printf("绗竴涓厓绱犲€煎簲璇ユ槸 1锛涘疄闄呬笂鏄?%d\n", value);

    for(int i=1; i<=QUEUE_MAX_SIZE; i++) {
        dequeue(q, &value);
        // printf("绗?d涓厓绱犵殑鍊煎簲璇ユ槸 %d锛涘疄闄呭€兼槸: %d\n", i, value);
        printf("绗?d涓厓绱犵殑鍊煎簲璇ユ槸 %d锛涘疄闄呭€兼槸: %d\n", i, i, value);
    }

    if(isEmpty(q) == 0) {
        printf("鎭枩锛佺幇鍦ㄩ槦鍒楅噷娌℃湁鍏冪礌浜嗭紒\n");
    } else {
        printf("鍟婏紒鎴戠殑浠ｇ爜鏈夐棶棰橈紒\n");
    }
}